package org.yzsd.common;

import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * <说明>
 * 已构建完成的视频流URL地址缓存工具类
 *
 * @Description：TODO
 * @Author Lay(czx)
 * @Date 2022/7/11 14:25
 * @Version 2.0
 */
@Slf4j
public class CacheUtils<T extends Cache> {

    //默认过期时间10分钟
    private int time_out = 10 * 60 * 1000;

    public CacheUtils() {

    }

    public CacheUtils(int timeOut) {
        this.time_out = timeOut;
    }

    /**
     * 带过期的缓存
     */
    private final TimedCache<String, T> timedCache = CacheUtil.newTimedCache(time_out);

    /**
     * <描述> <br/>
     * 获取缓存的URL
     *
     * @Description
     * @author Lay(czx)
     * @date 14:30 2022/7/11
     */
    public T get(String indexCode) {
        return timedCache.get(indexCode);
    }


    /**
     * <描述> <br/>
     * 从缓存中移除对象
     *
     * @Description
     * @author Lay(czx)
     * @date 10:01 2022/7/12
     */
    public void remove(String indexCode) {
        timedCache.remove(indexCode);
    }

    /**
     * <描述> <br/>
     * 缓存播放的URL
     *
     * @Description
     * @author Lay(czx)
     * @date 14:28 2022/7/11
     */
    public void cache(T cache) throws Exception {
        Assert.isTrue(ObjectUtil.isNotEmpty(cache), () -> new IllegalArgumentException("缓存失败，对象为空"));
        cache.validate();
        timedCache.put(cache.getIndexCode(), cache);
    }

}
